package main

import (
	"fmt"
	"strings"
)

type File struct {
	FileName     string
	FileSize     int64
	FileMeta     string
	FileUpdateAt string
}

// 简单的 map 声明
var singleMap = make(map[string]int)

// 元素为 map 类型的切片
var sliceMap = make([]map[string]File, 3)
var sliceMap2 = []map[string]string{
	{"name": "name"},
}

// 值为切片类型的map
var mapSlice = []map[string][]string{
	{
		"name": []string{"name"},
	},
}

// 值为切片类型的map,使用 make 声明   [key:[],key:[]]
var mapSlice2 = make([]map[string][]string, 3)

// 给值为切片类型的 map 增加元素
func genMapSlice2() {

	type StringArray []string       // 切片结构
	type Map map[string]StringArray // map 结构 string:[]

	var mapSlice2 = make([]Map, 3)
	//current := map[string][]string{
	//	//"name": []string{"name"},
	//	"name": {"name"},
	//}
	current := Map{
		//"name": []string{"name"},
		"name": {"name"},
	}
	mapSlice2 = append(mapSlice2, current)
}

var FileMetas map[string]File

func init() {
	//内置函数 make 创建空 map
	FileMetas = make(map[string]File)
}

// 返回一个文件列表
func GenFileMap() {
	// Map 是 Go 中的内置类型，它将键与值绑定到一起。可以通过键获取相应的值。
	// [string]int
	// make只能构建slice、map和channel这3种结构的数据对象
	_map := make(map[string]string)

	file := File{
		FileName:     "string",
		FileSize:     10,
		FileMeta:     "FileMeta",
		FileUpdateAt: "string",
	}
	FileMetas["hash"] = file

	fmt.Println(file, _map)
}

// 计算一个句子中出现同一单词出现的次数
func calcWordsInSentence(sentence string) map[string]int {
	// fmt.Printf("sentence 的地址%p\n", &sentence)
	type MyMap map[string]int
	splitWords := strings.Split(sentence, " ")
	result := make(MyMap)
	for _, word := range splitWords {
		result[word]++
	}
	fmt.Println(result)
	return result
}

var word = "hello world we are in a world can you see i can see you"

func main() {
	//fmt.Printf("sentence 的地址%p\n", &word)
	calcWordsInSentence(word)
}
